#!/bin/bash

# 检查deck账户是否已设置sudo密码
if [ "$(passwd --status deck | tr -s " " | cut -d " " -f 2)" == "P" ]; then
	echo Sudo密码已经设置！
else
	echo 正在设置sudo密码 deck:deck
	# 自动输入密码"deck"两次来设置密码
	echo -e "deck\ndeck" | passwd deck &>/dev/null
	echo Sudo密码已设置！
fi

echo 正在删除SD卡自动挂载udev规则并卸载/run/media/var
# 禁用SteamOS只读模式以允许修改系统文件
echo -e "deck\n" | sudo -S steamos-readonly disable &>/dev/null
# 删除SD卡自动挂载的udev规则文件
sudo rm /usr/lib/udev/rules.d/99-sdcard-mount.rules &>/dev/null
# 重新加载udev规则并触发udev事件
sudo udevadm control --reload
sudo udevadm trigger
# 卸载可能存在的SD卡挂载点
sudo umount /run/media/var &>/dev/null
sudo umount /run/media/deck/var &>/dev/null
echo SD卡自动挂载udev规则已删除！

# 检查指定的systemd服务是否存在
# 参数：$1 - 服务名称（不包含.service后缀）
service_exists() {
	local n=$1
	# 列出所有服务单元，查找指定的服务
	if [[ $(systemctl list-units --all -t service --full --no-legend "$n.service" | sed 's/^\s*//g' | cut -f1 -d' ') == $n.service ]]; then
		return 0  # 服务存在
	else
		return 1  # 服务不存在
	fi
}

# 在用户配置文件中运行此脚本
# 确保.profile文件存在并具有可执行权限
if [ ! -f "/home/deck/.profile" ]; then
	touch /home/deck/.profile
	sudo chmod +x /home/deck/.profile
fi

# 创建repair目录用于存放相关脚本
mkdir -p ~/.repair &>/dev/null

# 检查并复制repair_install_sdcard.sh脚本
FILE=~/.repair/repair_install_sdcard.sh
if [ ! -f "$FILE" ]; then
	# 获取当前脚本所在目录
	SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
	# 复制repair_install_sdcard.sh到用户目录
	sudo cp "$SCRIPT_DIR/repair_install_sdcard.sh" $FILE
	sudo chmod +x $FILE
fi

# 在.profile中添加repair_install_sdcard.sh的执行命令（如果尚未添加）
if ! grep -qsF "repair/repair_install_sdcard.sh" "/home/deck/.profile"; then
	cat >>/home/deck/.profile <<EOF
~/.repair/repair_install_sdcard.sh
EOF
fi

# 创建SD卡最小化写入服务（如果不存在）
if ! service_exists sdcard_minimize_write; then
	# 创建最小化写入脚本
	# 该脚本的作用是减少对SD卡的写入操作，延长SD卡寿命
	cat >~/.repair/sdcard_minimize_write.sh <<EOF
#!/bin/bash
# 遍历所有mmcblk0p开头的挂载点（SD卡分区）
for mountpoint in \$(mount | grep mmcblk0p | tr -s " " | cut -d " " -f 3)
do 
	# 重新挂载分区，添加noatime标志以减少访问时间更新
	mount -o rw,remount,noatime \$mountpoint
	echo \$mountpoint 已使用noatime标志重新挂载。
done
# 关闭交换文件以减少对SD卡的写入
swapoff /home/swapfile &> /dev/null
# 卸载可能的var目录挂载
umount /run/media/deck/var &> /dev/null
exit 0
EOF

	sudo chmod +x ~/.repair/sdcard_minimize_write.sh
	echo 脚本已创建！

	# 创建systemd服务来运行上述脚本
	sudo rm /etc/systemd/system/sdcard_minimize_write.service
	cat <<EOF | sudo tee -a /etc/systemd/system/sdcard_minimize_write.service &>/dev/null
[Unit]
Description=最小化对SD卡的写入 - 设置noatime标志并禁用交换。

[Service]
User=root
ExecStart=/home/deck/.repair/sdcard_minimize_write.sh

[Install]
WantedBy=multi-user.target
EOF
	echo 服务已创建：sdcard_minimize_write
fi

# 创建microSD卡卸载服务（如果不存在）
if ! service_exists microsd-umount; then
	# 创建服务在启动时卸载/run/media/var
	# 这是为了在更新模式下重启时继续更新过程
	sudo rm /etc/systemd/system/microsd-umount.service
	cat <<EOF | sudo tee -a /etc/systemd/system/microsd-umount.service &>/dev/null
[Unit]
Description=在启动时尝试最多10次卸载/run/media/var。

[Service]
User=root
ExecStart=/bin/bash -c "for i in {0..9}; do if mountpoint -q -- /run/media/var; then umount /run/media/var; else sleep 1; fi; done"

[Install]
WantedBy=multi-user.target
EOF
	echo 服务已创建：microsd-umount

	# 启用并启动这两个服务
	sudo systemctl enable sdcard_minimize_write
	sudo systemctl enable microsd-umount
	sudo systemctl start sdcard_minimize_write
	sudo systemctl start microsd-umount
	echo 服务已启用并启动。
fi

# 禁用SteamOS只读模式
sudo steamos-readonly disable
exit 0
